package java核心及工具类;

//Enumeration的作用:
//​ 实现 Enumeration 接口的对象，它生成一系列元素，一次生成一个。连续调用 nextElement 方法将返回一系列的连续元素。
//
//接口中所包含的只有两个方法:
//  -boolean hasMoreElements():测试此枚举是否包含更多的元素。
//  -E nextElement():如果此枚举对象至少还有一个可提供的元素，则返回此枚举的下一个元素。
//
//Java类实现Enumation接口实例:

import java.util.Enumeration;

public class Enumeration接口 {
	public static void main(String[] args) {
		// 实例化MyDataStruct类型的对象
		MyDataStruct myDataStruct = new MyDataStruct();
		// 得到描述myDataStruct类型对象的enumeration对象
		Enumeration myEnumeration = myDataStruct.getEnum();
		// 使用对象循环显示myDataStruct类型的对象中的每一个元素
		while (myEnumeration.hasMoreElements())
			System.out.println(myEnumeration.nextElement());
	}
}

//MyEnumeration类实现Enumeration接口
class MyEnumeration implements Enumeration {
	int count; // 计数器
	int length; // 存储的数组的长度
	Object[] dataArray; // 存储数据数组的引用
	// 构造器

	MyEnumeration(int count, int length, Object[] dataArray) {
		this.count = count;
		this.length = length;
		this.dataArray = dataArray;
	}

	public boolean hasMoreElements() { // 实现接口中的hasMoreElements()方法
		return (count < length);
	}

	public Object nextElement() { // 实现接口中的nextElement()方法
		return dataArray[count++];
	}
}

//MyDataStruct类用于实例化一个简单的、可以提供enumeration对象
//给使用程序的数据结果对象
class MyDataStruct {
	int count; // 计数器
	int length; // 存储的数组的长度
	String[] data;

	// 构造器
	MyDataStruct() {
		data = new String[4];
		data[0] = "zero";
		data[1] = "one";
 		data[3] = "three";
	}

	// 返回一个enumeration对象给使用程序
	Enumeration getEnum() {
		return new MyEnumeration(0, data.length, data);
	}
//	public MyDataStruct(int count,int length,String[] data) {
//		this.count=count;
//		this.length=data.length;
//		this.data=data;
//	}
}

/*public class Enumeration接口 {//改为Itertor()
	public static void main(String[] args) {
		MyDataIterator<String> ndata = new MyDataIterator<>();
		ndata.add("zero");
		ndata.add("one");
		ndata.add("three");

		for (String s : ndata) {
			System.out.println(s);
		}
	}
}

class MyDataIterator<T> implements Iterable<T> {
	private List<T> data = new ArrayList<>();

	public void add(T t) {
		data.add(t);
	}

//	private String data;
//	public MyDataIterator(String[] data) {
//		this.setData(data);
//	}
	public Iterator<T> iterator() {
		return new myIterator(data.size());
	}

	class myIterator implements Iterator<T> {
		int index;

		myIterator(int index) {
			this.index = index;
		}

		public boolean hasNext() {
			return index > 0;
		}

		@Override
		public T next() {
			index--;
			return MyDataIterator.this.data.get(index);
		}

	}
}*/
//	// 返回一个enumeration对象给使用程序
//	Enumeration getEnum() {
//		return new MyEnumeration(0, data.length, data);
